using Needle.Bus.Engine.Stages;

namespace Needle.Bus.Engine
{
    /// <summary>
    /// Defines a processing stage of the bus.
    /// </summary>
    public interface IStage : IIsActive, IEngineComponent
    {
        /// <summary>
        /// The input buffer for this stage.
        /// </summary>
        IBufferQueue Buffer { get; }
        /// <summary>
        /// The filter manager.
        /// </summary>
        IStageFilter Filter { get; }
        /// <summary>
        /// The message handler.
        /// </summary>
        IMessageHandler Handler { get; }
        /// <summary>
        /// The performance counter.
        /// </summary>
        IPerformanceCounter PerfCounter { get; }
        /// <summary>
        /// Stage options
        /// </summary>
        BatchModeOptions BatchMode { get; set; }

    }
}
